package com.david.func_test.scroller;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Build;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Scroller;

import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;

public class ScrollTestView extends View {
    private float mDownX = 0;
    private float mDonwY = 0;
    private float move_x = 0;
    private float move_y = 0;
    private int finalX = 0;
    private int finalY = 0;

    private Paint mPaint;

    private Scroller mScroller;

    public ScrollTestView(Context context) {
        super(context);
        init(context);
    }

    public ScrollTestView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public ScrollTestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public ScrollTestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context);
    }

    private void init(Context mContext){
        mPaint = new Paint();
        mPaint.setTextSize(80);

        mScroller = new Scroller(mContext);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawText("testing！", 0, 100, mPaint);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                //标志着第一个手指按下
                mDownX = x;//获取按下时x坐标值
                mDonwY = y;//获取按下时y坐标值
                break;
            case MotionEvent.ACTION_MOVE:
                //按住一点手指开始移动
                move_x = mDownX - x;//计算当前已经移动的x轴方向的距离
                move_y = mDonwY - y;//计算当前已经移动的y轴方向的距离

                //开始滚动动画
                //第一个参数：x轴开始位置
                //第二个参数：y轴开始位置
                //第三个参数：x轴偏移量
                //第四个参数：y轴偏移量
                mScroller.startScroll(finalX, finalY, (int) move_x, (int) move_y, 0);
                invalidate();//目的是重绘view，是的执行computeScroll方法
                break;
            case MotionEvent.ACTION_UP:
                finalX = mScroller.getFinalX();
                finalY = mScroller.getFinalY();

                break;

        }
        return true;
    }

    @Override
    public void computeScroll() {
        super.computeScroll();
        if(mScroller.computeScrollOffset()){//判断滚动是否完成，true说明滚动尚未完成，false说明滚动已经完成
            scrollTo(mScroller.getCurrX(),mScroller.getCurrY());//将view直接移动到当前滚动的位置
            invalidate();//触发view重绘
        }
    }
}
